home *** CD-ROM | disk | FTP | other *** search
- #!/usr/bin/perl
- eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
- if $running_under_some_shell;
- #!/usr/bin/perl
- # $Id: cpan,v 1.3 2002/08/30 08:55:15 k Exp $
- use strict;
-
- =head1 NAME
-
- cpan - easily interact with CPAN from the command line
-
- =head1 SYNOPSIS
-
- # with arguments, installs specified modules
- cpan module_name [ module_name ... ]
-
- # with switches, installs modules with extra behavior
- cpan [-cimt] module_name [ module_name ... ]
-
- # without arguments, starts CPAN shell
- cpan
-
- # without arguments, but some switches
- cpan [-ahrv]
-
- =head1 DESCRIPTION
-
- This script provides a command interface (not a shell) to CPAN.pm.
-
- =head2 Meta Options
-
- These options are mutually exclusive, and the script processes
- them in this order: [ahvr]. Once the script finds one, it ignores
- the others, and then exits after it finishes the task. The script
- ignores any other command line options.
-
- =over 4
-
- =item -a
-
- Creates the CPAN.pm autobundle with CPAN::Shell->autobundle.
-
- =item -h
-
- Prints a help message.
-
- =item -r
-
- Recompiles dynamically loaded modules with CPAN::Shell->recompile.
-
- =item -v
-
- Print the script version and CPAN.pm version.
-
- =back
-
- =head2 Module options
-
- These options are mutually exclusive, and the script processes
- them in alphabetical order.
-
- =over 4
-
- =item c
-
- Runs a `make clean` in the specified module's directories.
-
- =item i
-
- Installed the specified modules.
-
- =item m
-
- Makes the specified modules.
-
- =item t
-
- Runs a `make test` on the specified modules.
-
- =back
-
- =head2 Examples
-
- # print a help message
- cpan -h
-
- # print the version numbers
- cpan -v
-
- # create an autobundle
- cpan -a
-
- # recompile modules
- cpan -r
-
- # install modules
- cpan -i Netscape::Booksmarks Business::ISBN
-
- =head1 TO DO
-
- * add options for other CPAN::Shell functions
- autobundle, clean, make, recompile, test
-
- =head1 BUGS
-
- * none noted
-
- =head1 SEE ALSO
-
- Most behaviour, including environment variables and configuration,
- comes directly from CPAN.pm.
-
- =head1 AUTHOR
-
- brian d foy <bdfoy@cpan.org>
-
- =cut
-
- use CPAN ();
- use Getopt::Std;
-
- my $VERSION =
- sprintf "%d.%02d", q$Revision: 1.3 $ =~ m/ (\d+) \. (\d+) /xg;
-
- my $Default = 'default';
-
- my $META_OPTIONS = 'ahvr';
-
- my %CPAN_METHODS = (
- $Default => 'install',
- 'c' => 'clean',
- 'i' => 'install',
- 'm' => 'make',
- 't' => 'test',
- );
-
- my @cpan_options = grep { $_ ne $Default } sort keys %CPAN_METHODS;
-
- my $arg_count = @ARGV;
- my %options;
-
- Getopt::Std::getopts(
- join( '', @cpan_options, $META_OPTIONS ), \%options );
-
- if( $options{h} )
- {
- print STDERR "Printing help message -- ignoring other arguments\n"
- if $arg_count > 1;
-
- print STDERR "Use perldoc to read the documentation\n";
- exit 0;
- }
- elsif( $options{v} )
- {
- print STDERR "Printing version message -- ignoring other arguments\n"
-
- if $arg_count > 1;
-
- my $CPAN_VERSION = CPAN->VERSION;
- print STDERR "cpan script version $VERSION\n" .
- "CPAN.pm version $CPAN_VERSION\n";
- exit 0;
- }
- elsif( $options{a} )
- {
- print "Creating autobundle in ", $CPAN::Config->{cpan_home},
- "/Bundle\n";
- print STDERR "Creating autobundle -- ignoring other arguments\n"
- if $arg_count > 1;
-
- CPAN::Shell->autobundle;
- exit 0;
- }
- elsif( $options{r} )
- {
- print STDERR "Creating autobundle -- ignoring other arguments\n"
- if $arg_count > 1;
-
- CPAN::Shell->recompile;
- }
- else
- {
- my $switch = '';
-
- foreach my $option ( @cpan_options )
- {
- next unless $options{$option};
- $switch = $option;
- last;
- }
-
- if( not $switch and @ARGV ) { $switch = $Default; }
- elsif( not $switch and not @ARGV ) { CPAN::shell(); exit 0; }
- elsif( $switch and not @ARGV )
- { die "Nothing to $CPAN_METHODS{$switch}!\n"; }
-
- my $method = $CPAN_METHODS{$switch};
- die "CPAN.pm cannot $method!\n" unless CPAN::Shell->can( $method );
-
- foreach my $arg ( @ARGV )
- {
- CPAN::Shell->$method( $arg );
- }
- }
-
- 1;
-